#pragma once

#include"Common.h"


// central cache本质上是由SpanList构成的哈希桶
// 设计成单例模式 - 保证全局只有一个CentralCache
class CentralCache
{
public:
    // 提供一个全局访问点
    static CentralCache* GetInstance()
    {
        return &_sInst;
    }
    
    // 从CentralCache中获取一定数量的内存对象
    size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);

    // 从SpanList或者page cache中获取一个非空的span
    Span* GetOneSpan(SpanList& list, size_t size);

    // 将一定数量的内存对象释放回span跨度
    void ReleaseListToSpans(void* start, size_t size);

private:
    CentralCache()
    {}

    CentralCache(const CentralCache&) = delete;

    static CentralCache _sInst;

private:
    SpanList _spanLists[NFREELISTS];
};